# Python 趣味编程：第 2 章
#    例題 2.2 墙壁的引入
# --------------------------
# 程序名: 02-ball-2.py

from tkinter import *
import time

DURATION = 0.001   # sleep 时间 = 绘制的间隔
STEPS = 600        # 球的重写次数
Y = 200            # 球的 Y 初始值
D = 10             # 球的直径

# 定义绘制墙壁的函数
def make_walls(ox, oy, width, height):
    canvas.create_rectangle(ox, oy, ox + width, oy + height)

tk = Tk()
canvas = Canvas(tk, width=800, height=600, bd=0)
canvas.pack()
tk.update()

x = 150            # 球的 X 初始值
vx = 2             # 球的移动量

make_walls(100, 100, 600, 400)  # 实际上在这里绘制墙壁
id = canvas.create_rectangle(x, Y, x + D, Y + D,
                             fill="darkblue", outline="black")
                   # 绘制方块，取得其 id (标识符)
for s in range(STEPS):
    x = x + vx          # x 改变 x 坐标的值
    if x + D >= 700:
        # 如果球的右端超过 700
        vx = -vx        # 调转方向
    canvas.coords(id, x, Y, x + D, Y + D)  # 设置新的坐标
    tk.update()             # 将绘图反映到画面上
    time.sleep(DURATION)    # 一直 sleep，直到下一次绘制

